iT邦幫忙

DAY 5
0

淺入淺出-計算機組織系列 第 5

淺入淺出計組之旅(5)計算機執行指令的過程

  • 分享至 

  • xImage
  •  

今天到天母看棒球,正在回中壢的路上

被逆轉整個心情鬱悶阿,對韓國也是先領先又被追上

讓人想起去年經典賽和之前的各大國際賽事,有時候就是差那麼一點QQ

下週決戰澄清湖希望能進季後賽!!!

上兩篇簡介了這個模型機的基本元件和架構

接下來來看看動態的流程

計算機在執行一條指令時的主要步驟有四:

* 取指 (Fetch)
* 譯碼 (Decode)
* 執行 (Execute)
* 回寫 (Write-back)

以上圖為例我們將執行一條指令:ADD R0, [6]

也就是要將 R0 和記憶體位址為 6 的數據加起來得到一個運算結果

在這種指令格式中第一個數我們會默認為既是輸入也是輸出

所以最後結果會回存到 R0 這個暫存器當中

以這個圖中數據所示,就是把存儲器中位址 0110(6) 的資料和 R0 中的相加

可以觀察到的是 PC 中的數值也就是下一條要被執行的指令是存在 0001 這個位址的

接下來就是來觀察這個模型該怎麼實際執行這條指令

取指

* 控制器將指令的地址送往存儲器
* 存儲器案給定的地址讀出指令內容送回控制器

具體步驟如下:

  1. 控制器發出信號將 PC 中的 0001 透過內部總線送到 MAR
  2. 接著再透過地址總線將 0001 送到存儲器的 MAR
  3. 控制器發出控制信號告訴存儲器要讀取數值
  4. 存儲器透過地址譯碼器知道對應的地址在哪,並把數據讀出來存在 MDR 中
  5. 存儲器的控制邏輯透過控制總線告訴 CPU 數據已經讀好了
  6. 存儲器 MDR 中的數據透過數據總線傳到 CPU 的 MDR 中
  7. 這份指令再從 CPU 的 MDR 透過內部總線傳到 IR
  8. 最後最後將 PC++ 完成取指步驟

譯碼

* 控制器分析指令的操作性質
* 控制器向相關元件發出指令所需的控制信號

也就是說:

  1. 指令譯碼元件解碼 IR 中的指令,讀出原來是 ADD R0, [6]
  2. 控制電路據此產生相應的控制信號,完成譯碼步驟

欸這麼快,上面不是漏漏長嗎,雖然老師沒有說

不過感覺就是個留待後面介紹的感覺,就乖乖地接著把課上下去吧

執行

* 控制器從通用暫存器或是存儲器取出操作數據
* 控制器命令運算器對操作數進行指令規定的運算

根據這條指令我們會發現需要再去存儲器中拿 [6] 的資料

  1. 將 [6] 的位址透過內部總線放到 MAR 中
  2. 再透過地址總線送到存儲器的 MAR
  3. 控制器告訴存儲器我要拿 MAR 這個位址的資料
  4. ...與取指的步驟雷同,請參考取指到步驟 6
  5. 數據傳到 CPU 的 MDR 中後,因為要進行加法運算,所以值會被再送到 ALU 的輸入暫存器 X 或 Y 中
  6. 控制器將另一個操作數從 R0 傳到 ALU 的另一個輸入端
  7. ALU 終於可以進行運算,並將結果存在輸出暫存器中,完成執行階段

回寫

* 將運算結果寫入通用暫存器或存儲器

控制器在 ALU 完成運算後會將結果從輸出暫存器透過內部總線搬回指令指定的位置 R0

也就是把加法的結果保存下來

我想如果是要存回存儲器,應該是會把資料送到 MDR 吧。

接著 CPU 就會自動再回到取指繼續執行下一條指令,然後不斷取指譯碼執行回寫 loop

心得

到目前為止我們已經掌握了這個馮紐曼架構模型的運作原理

下一篇將關注如何透過輸入設備對計算機下達指令,計算機又是怎麼透過輸出設備把結果顯示出來。

一條指令的運行背後竟然有這麼複雜的結構關係

現在的 CPU 不是動輒一秒幾百萬行(?)指令在跑嗎,只能說能夠想出這些的人真的是天才阿(大拇指)


上一篇
淺入淺出計組之旅(4)計算機結構的簡化模型 (下)
下一篇
淺入淺出計組之旅(6)計算機輸入與輸出 (上)
系列文
淺入淺出-計算機組織30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言